# 可迭代对象: 可直接用于for循环的实体
# isinstance()  判断一个实体是否是可迭代对象

# import　模块名　　　导入某个模块
'''
from collections.abc import Iterable
print(isinstance([],Iterable))  # True
print(isinstance((),Iterable))  # True
print(isinstance({},Iterable))  # True 
print(isinstance("hello",Iterable)) # True

print(isinstance((i for i in range(1,11)),Iterable))  # True



print(isinstance(123,Iterable))  # False
print(isinstance(12.34,Iterable))  # False
print(isinstance(True,Iterable))  # False

'''
# 总结: 列表\元组\字典\集合\生成器都是可迭代对象   整型\浮点型\布尔类型不是可迭代对象


# 迭代器: 既可以被for循环遍历,也可以被next函数遍历,叫做迭代器.
# 目前为止:只有生成器是迭代器.

# 总结: 可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象.
# isinstance() 判断一个实体是否是迭代器
from collections.abc import Iterator

print(isinstance([],Iterator))  # Fasle
print(isinstance((),Iterator))  # False
print(isinstance({},Iterator))  # False 
print(isinstance("hello",Iterator)) # False

print(isinstance((i for i in range(1,11)),Iterator))  # True


# 迭代器和可迭代对象之间的转换   iter()
# 虽然list set dict str 这些可迭代对象不能被next()遍历,但是可以通过iter()函数将他们变为迭代器
list1 = [12,346,789,43]
# print(next(list1))  # TypeError: 'list' object is not an iterator
iterator1 = iter(list1)
print(next(iterator1))
print(next(iterator1))
